//队列的封装
function Queue() {
  // 属性
  this.item = [];
  // 方法
  //1.将元素加入到队列中
  Queue.prototype.enqueue = function (element) {
    return this.item.push(element);
  };
  //2.从队列中删除前端元素
  Queue.prototype.dequeue = function () {
    // 删除数组第一个元素,所以性能不高
    return this.item.shift();
  };
  //3.查看前端的元素
  Queue.prototype.front = function () {
    return this.item[0];
  };
  //4.查看队列是否为空
  Queue.prototype.isEmpty = function () {
    return this.item.length == 0;
  };
  //5.查看队列中元素的个数
  Queue.prototype.size = function () {
    return this.item.length;
  };
  //6.toString方法
  Queue.prototype.toString = function () {
    let resultString = "";
    for (let i = 0; i < this.item.length; i++) {
      resultString += this.item[i] + " ";
    }
    return resultString;
  };
}

// 面试题：击鼓传花
function passGame(nameList, num) {
  //1，创建一个队列结构
  let queue = new Queue();
  //2，将所有人依次加入到队列中
  for (let i = 0; i < nameList.length; i++) {
    queue.enqueue(nameList[i]);
  }

  // 套一个while循环 因为不知道循环多少次
  while (queue.size() > 1) {
    //3，开始数数字，不是num的时候，重新加入到队列的末尾,是num这个数字的时候，将其从队列中删除
    //3.1.num数字之前的人重新放入到队列的末尾
    for (let i = 0; i < num - 1; i++) {
      queue.enqueue(queue.dequeue());
    }
    //3.2.num对应这个人，直接从队列中删除掉
    queue.dequeue();
  }

  // 4，获取剩下的那个人
  let end_name = queue.front();
  let end_index = nameList.indexOf(end_name);

  console.log("最终剩下的那个人: ", end_name, end_index);
}

// 测试
names = ["a", "b", "c", "d", "e", "f"];
passGame(names, 4);
